import {
	reactive
} from 'vue';

// 定义枚举类型
const ChargingMode = {
	ConstantVoltage: '恒压',
	ConstantCurrent: '恒流',
};

const StatusEnum = {
	Normal: '正常',
	High: '高',
	Low: '低',
};

// 创建响应式对象
const BHM_DATA = reactive({
	Maximum_allowable_total_charging_voltage: 0, // 最大允许充电总电压
});

const Version_BMScommun = reactive({
	VersionArr: [0, 0, 0], // 版本数组
	value: 0, // 整个16位共用体的数值
});

const BMSChargeCount = reactive({
	ChargeCount: [0, 0, 0], // 充电计数数组
	value: 0, // 整个16位共用体的数值
});

const BCP_DATA = reactive({
	MaxChargingVoltageSingle: 0, // 单体最高允许充电电压
	MaxChargingCurrent: 0, // 最高允许充电电流
	NominalTotalEnergy: 0, // 动力蓄电池标称总能量
	MaxTotalChargingVoltage: 0, // 最高允许充电总电压
	MaxTemperature: 0, // 最高允许温度
	ChargeState: 0, // 整车动力电池电荷状态
	CurrentVoltage: 0, // 整车动力蓄电池当前电池电压
});

const BRO_DATA = reactive({
	Whether_the_BMS_is_ready: false,
	/* BMS是否准备就绪 */
});

const BCL_DATA = reactive({
	VoltageDemand: 0, // 电压需求(V)
	CurrentDemand: 0, // 电流需求(A)
	Mode: Object.values(ChargingMode)[0], // 充电模式
});

const VoltageAndGroup = reactive({
	voltage: 0, // 前12个bit用于表示电压
	group: 0, // 后4个bit用于表示组号
	value: 0, // 整个16位共用体的数值
});

const BCS_DATA = reactive({
	ChargingVoltage: 0, // 充电电压测量值 (2字节, 精度0.1)
	ChargingCurrent: 0, // 充电电流测量值 (2字节, 精度0.1)
	MaxSingleCellVoltage: {}, // 最高单体动力蓄电池电压及组号 (1字节, 精度0)
	SOC: 0, // 当前荷电状态SOC% (1字节, 精度1%)
	RemainingChargeTime: 0, // 估算剩余充电时间 (2字节, 精度1min)
});

const BRM_DATA = reactive({
	VersionNumber: {}, // 协议版本号
	BatteryType: '', // 车电池类型
	RatedCapacity: 0, // 动力蓄电池系统额定容量
	RatedTotalVoltage: 0, // 动力电池蓄电池额定总电压
	Battery_manufacturer: '*****************', // 厂家编号
	BatterySerialNumber: [], // 电池组序号
	Batteryack_production_dateYesr: 0, // 年
	Batteryack_production_dateMouth: 0, // 月
	Batteryack_production_dateData: 0, // 日
	Battery_pack_charge_count: {}, // 电池组充电计数
	Battery_pack_property_right_identification: 0, // 电池组产权标识
	reserve: 0, // 保留
	ucCarVin: '', // 车辆VIN
	BMS_Software_version_number: '', // BMS软件版本号
});

const BSM_DATA_FAULT = reactive({
	high_low_voltage_status: 0, // 单体动力蓄电池电压过高/过低
	high_low_SOC_status: 0, // 整车动力蓄电池电荷状态SOC过高/过低
	charging_overcurrent_status: 0, // 动力蓄电池充电过电流
	high_temperature_status: 0, // 动力蓄电池温度过高
	insulation_status: 0, // 动力蓄电池绝缘状态
	output_connector_status: 0, // 动力蓄电池组输出连接器链接状态
	charging_permission: 0, // 充电允许
});

const BSM_DATA = reactive({
	highest_cell_voltage_number: 0, // 最高单体动力蓄电池电压所在编号
	highest_battery_temperature: 0, // 最高动力蓄电池温度
	highest_temperature_detection_point: 0, // 最高温度检测点编号
	lowest_battery_temperature: 0, // 最低动力蓄电池温度
	lowest_temperature_detection_point: 0, // 最低动力蓄电池温度检测点编号
	high_low_voltage_status: Object.values(StatusEnum)[0], // 单体动力蓄电池电压过高/过低
	high_low_SOC_status: Object.values(StatusEnum)[0], // 整车动力蓄电池电荷状态SOC过高/过低
	charging_overcurrent_status: Object.values(StatusEnum)[0], // 动力蓄电池充电过电流
	high_temperature_status: Object.values(StatusEnum)[0], // 动力蓄电池温度过高
	insulation_status: Object.values(StatusEnum)[0], // 动力蓄电池绝缘状态
	output_connector_status: Object.values(StatusEnum)[0], // 动力蓄电池组输出连接器链接状态
	charging_permission: Object.values(StatusEnum)[0], // 充电允许
	BSM_DATA_FAULT: reactive(BSM_DATA_FAULT),
});

const BST_DATA_FAULT = reactive({
	SOC_Target: 0, // 达到所需求的SOC目标值
	Total_voltage_set_point: 0, // 达到总电压设定值
	Cell_voltage_set_point: 0, // 达到单体电压设定值
	Charging_pile_stops_actively: 0, // 充电机主动中止
	Fault_insulation: 0, // 绝缘故障
	Overtemperature_fault_output_connector: 0, // 输出连接器过温故障
	BMS_element_Overtemperature_fault_output_connector: 0, // BMS元件,输出连接器故障
	Charging_connector_failure: 0, // 充电连接器故障
	High_temperature_fault_battery_pack: 0, // 电池组温度过高故障
	Fault_high_voltage_relay: 0, // 高压继电器故障
	Check_voltage_fault_point_2: 0, // 检测点2电压检测故障
	Other_failures: 0, // 其他故障
	Excessive_current: 0, // 电流过大
	Abnormal_voltage: 0, // 电压异常
});

const BST_DATA = reactive({
	charge_abort_reason: 0, // BMS中止充电原因
	charge_abort_faults: 0, // BMS中止充电故障原因
	charge_abort_errors: 0, // BMS中止充电错误原因
	BST_DATA_FAULT: reactive(BST_DATA_FAULT),
});

const BSD_DATA = reactive({
	soc_abort: 0, // 中止荷电状态SOC
	min_cell_voltage: 0, // 动力蓄电池单体最低电压 (0.01V)
	max_cell_voltage: 0, // 动力蓄电池单体最高电压 (0.01V)
	min_battery_temperature: 0, // 动力蓄电池最低温度 (-50℃)
	max_battery_temperature: 0, // 动力蓄电池最高温度 (-50℃)
});

// 共用体对应的数据对象
const CDZnumPackStart = reactive({
	req: 0, // 接受请求 接收时为0x11
	packNUM: 0, // 包数
	packID: 0, // 下一个要接受的包头
	data: [0, 0],
	PGN: 0, // PGN码
});

const CDZnumPackStop = reactive({
	req: 0, // 接受请求 结束多包发送 0x13
	dataNUM: 0, // 接受了多少数据
	data1: 0, // 占位 默认值00
	packNUM: 0, // 接收了多少数据包
	data2: 0,
	PGN: 0, // PGN码
});

const BMSnumPackStar = reactive({
	req: 0, // 发送包头默认 0x10
	SendDataNUM: 0, // 要发送多少数据
	data1: 0, // 占位 默认值```javascript
	packNUM: 0, // 分多少包发送
	data2: 0xff, // 默认0xff 站位
	PGN: [0, 0, 0], // PGN码
});